placesview: show Disconnect instead of Eject
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>
Mon, 10 Aug 2015 18:35:56 +0000 (15:35 -0300)
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>
Mon, 10 Aug 2015 18:35:56 +0000 (15:35 -0300)
Since we're dealing with networks, terms like "Eject" or
the eject button are misleading, since we're not actually
ejecting but disconnecting.

Fix that by showing the appropriate icon and tooltip.

gtk/gtkplacesview.c
gtk/gtkplacesviewrow.c
gtk/gtkplacesviewrowprivate.h
gtk/ui/gtkplacesviewrow.ui

index ca02fe04b58fe4dfbf65e43857c0376a0975fb97..3721be71bfb7d55e3aad3a822ca237244cc217fc 100644 (file)
@@ -701,6 +701,7 @@ add_volume (GtkPlacesView *view,
                           "volume", volume,
                           "mount", mount,
                           "file", NULL,
+                          "is-network", is_network,
                           NULL);
 
       insert_row (view, row, is_network);
@@ -748,6 +749,7 @@ add_mount (GtkPlacesView *view,
                           "volume", NULL,
                           "mount", mount,
                           "file", NULL,
+                          "is-network", is_network,
                           NULL);
 
       insert_row (view, row, is_network);
@@ -1314,10 +1316,12 @@ build_popup_menu (GtkPlacesView    *view,
   GtkWidget *item;
   GMount *mount;
   GFile *file;
+  gboolean is_network;
 
   priv = gtk_places_view_get_instance_private (view);
   mount = gtk_places_view_row_get_mount (row);
   file = gtk_places_view_row_get_file (row);
+  is_network = gtk_places_view_row_get_is_network (row);
 
   priv->popup_menu = gtk_menu_new ();
   gtk_style_context_add_class (gtk_widget_get_style_context (priv->popup_menu),
@@ -1373,7 +1377,7 @@ build_popup_menu (GtkPlacesView    *view,
   /* Mount/Unmount items */
   if (mount)
     {
-      item = gtk_menu_item_new_with_mnemonic (_("_Unmount"));
+      item = gtk_menu_item_new_with_mnemonic (is_network ? P_("_Disconnect") : P_("_Unmount"));
       g_signal_connect (item,
                         "activate",
                         G_CALLBACK (unmount_cb),
@@ -1383,7 +1387,7 @@ build_popup_menu (GtkPlacesView    *view,
     }
   else
     {
-      item = gtk_menu_item_new_with_mnemonic (_("_Mount"));
+      item = gtk_menu_item_new_with_mnemonic (is_network ? P_("_Connect") : P_("_Mount"));
       g_signal_connect (item,
                         "activate",
                         G_CALLBACK (mount_cb),
index 641399f7097ebc38cedd497af89bb1c8f80ac435..3e66398e292955bca8cc422201de4f08a532da6c 100644 (file)
@@ -31,6 +31,7 @@ struct _GtkPlacesViewRow
 
   GtkSpinner    *busy_spinner;
   GtkButton     *eject_button;
+  GtkImage      *eject_icon;
   GtkEventBox   *event_box;
   GtkImage      *icon_image;
   GtkLabel      *name_label;
@@ -39,6 +40,8 @@ struct _GtkPlacesViewRow
   GVolume       *volume;
   GMount        *mount;
   GFile         *file;
+
+  gint           is_network : 1;
 };
 
 G_DEFINE_TYPE (GtkPlacesViewRow, gtk_places_view_row, GTK_TYPE_LIST_BOX_ROW)
@@ -51,6 +54,7 @@ enum {
   PROP_VOLUME,
   PROP_MOUNT,
   PROP_FILE,
+  PROP_IS_NETWORK,
   LAST_PROP
 };
 
@@ -107,6 +111,10 @@ gtk_places_view_row_get_property (GObject    *object,
       g_value_set_object (value, self->file);
       break;
 
+    case PROP_IS_NETWORK:
+      g_value_set_boolean (value, self->is_network);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -149,6 +157,10 @@ gtk_places_view_row_set_property (GObject      *object,
       g_set_object (&self->file, g_value_get_object (value));
       break;
 
+    case PROP_IS_NETWORK:
+      gtk_places_view_row_set_is_network (self, g_value_get_boolean (value));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -206,12 +218,20 @@ gtk_places_view_row_class_init (GtkPlacesViewRowClass *klass)
                                G_TYPE_FILE,
                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
 
+  properties[PROP_IS_NETWORK] =
+          g_param_spec_boolean ("is-network",
+                                P_("Whether the row represents a network location"),
+                                P_("Whether the row represents a network location"),
+                                FALSE,
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
+
   g_object_class_install_properties (object_class, LAST_PROP, properties);
 
   gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/ui/gtkplacesviewrow.ui");
 
   gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, busy_spinner);
   gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, eject_button);
+  gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, eject_icon);
   gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, event_box);
   gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, icon_image);
   gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, name_label);
@@ -282,3 +302,26 @@ gtk_places_view_row_set_busy (GtkPlacesViewRow *row,
 
   gtk_widget_set_visible (GTK_WIDGET (row->busy_spinner), is_busy);
 }
+
+gboolean
+gtk_places_view_row_get_is_network (GtkPlacesViewRow *row)
+{
+  g_return_val_if_fail (GTK_IS_PLACES_VIEW_ROW (row), FALSE);
+
+  return row->is_network;
+}
+
+void
+gtk_places_view_row_set_is_network (GtkPlacesViewRow *row,
+                                    gboolean          is_network)
+{
+  if (row->is_network != is_network)
+    {
+      row->is_network = is_network;
+
+      gtk_image_set_from_icon_name (row->eject_icon,
+                                    is_network ? "network-offline-symbolic" : "media-eject-symbolic",
+                                    GTK_ICON_SIZE_BUTTON);
+      gtk_widget_set_tooltip_text (GTK_WIDGET (row->eject_button), is_network ? P_("Disconnect") : P_("Unmount"));
+    }
+}
index 20add04241493018c5272dfce9b990a7551aa1a6..3c46d5d9a5d01011c3f168febbc440e8760eb792 100644 (file)
@@ -48,6 +48,11 @@ GFile*             gtk_places_view_row_get_file                  (GtkPlacesViewR
 void               gtk_places_view_row_set_busy                  (GtkPlacesViewRow   *row,
                                                                   gboolean            is_busy);
 
+gboolean           gtk_places_view_row_get_is_network            (GtkPlacesViewRow   *row);
+
+void               gtk_places_view_row_set_is_network            (GtkPlacesViewRow   *row,
+                                                                  gboolean            is_network);
+
 G_END_DECLS
 
 #endif /* GTK_PLACES_VIEW_ROW_H */
index c46079bbcf566b3cd8b20997035f787d1339727c..d1e923b191149dfcbdfc2af6d7d4ecccee95ee79 100644 (file)
@@ -72,7 +72,7 @@
                 <property name="valign">center</property>
                 <property name="tooltip-text" translatable="yes">Unmount</property>
                 <child>
-                  <object class="GtkImage">
+                  <object class="GtkImage" id="eject_icon">
                     <property name="visible">True</property>
                     <property name="icon_name">media-eject-symbolic</property>
                     <property name="icon_size">1</property>